package topic.dayday;

//754. 到达终点数字
public class ReachNumber_754 {
    public static void main(String[] args) {
        int a = 11;
        System.out.println(method(a));
    }

    /*
    根据题意对于 1 2 3 4 5 6，这些数我们可以在其前面加上+或者-号后，对其求和，得到与target结果相同的和，求当前最后一位数
    思路： 我们可以沿着数组的一个方向累加上数字1，2，3，4，5，直到和sum大于等于target，然后再判断sum是否等于target，若等于则直接返回index即可。
     若不等于的话，那怎么办，此时的sum是大于target，那我们就可以尝试着减掉之前多加上的数，比如target=2是，1 + 2 = 3 > 2，此时刚好sum>target，
     那我们必需得减掉一些值才有可能在之后的继续累加情况下sum==target，你说是吧，这是若要把1减去则原式子就成了-1 + 2 = 1，看成什么了吗，
     没错一个数取正数和取负数对于sum的影响是他原来的2倍，此时若（sum - target）的值为偶数的话，表明在之前累加过程中必然会出现有的数之和等于sum - target，
     则可以直接返回index，理由：sum 在与target判断大小之前处于sum < target状态，之后sum+index > target，显然 sum - target < index，如3 + 3 >= 6 > 5, 5 - 3 = 2 < 3。

     */
    public static int method(int target) {
        int sum = 0, index = 0;
        target = Math.abs(target);
        while (sum < target) {
            index++;
            sum += index;
        }
        if (sum == target) {
            return index;
        }
        while ((sum - target) % 2 != 0) {
            index++;
            sum += index;
        }
        return index;
    }
}
